/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sgsmcan.Controlador;

import com.sgsmcan.Dao.PermisoDao;
import com.sgsmcan.Dao.PermisoDaoImpl;
import com.sgsmcan.Dao.UsuarioDao;
import com.sgsmcan.Dao.UsuarioDaoImpl;
import com.sgsmcan.Entidad.Permiso;
import com.sgsmcan.Entidad.Usuario;
import com.sgsmcan.Utils.Utilitario;
import java.io.Serializable;
import java.util.HashSet;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author user
 */
@ManagedBean(name = "loginBean")
@RequestScoped
public class LoginControlador implements Serializable{
    
    private UsuarioDao daoUsuario;
    
    private PermisoDao daoPermiso;
    
    String nick;
    
    String clave;
    
    private UsuarioControlador usuario = null;
    
    
    public LoginControlador() {
        daoUsuario = new UsuarioDaoImpl();
        daoPermiso = new PermisoDaoImpl();
    }
    
    public String login(){
        if(!esValido()){
            return "";
        }
        usuario = new UsuarioControlador();
        Usuario user = daoUsuario.getForID(nick);
        List<Permiso> permisos = daoPermiso.getPermisosPorPerfil(user.getRol().getId());
        user.getRol().setPermisos(new HashSet<Permiso>(permisos));
        usuario.setUsuario(user);
        usuario.ensamblarMenu();
        usuario.verificarAlarmas();
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuarioBean", usuario);
        return "home";
    }
    
    public String logout(){
        HttpSession session = (HttpSession)
        FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();
        if(session != null){
            session.invalidate();
        }
        return "salir";
    }
    
    private boolean esValido(){
        if(!esNickValido()){
            return false;
        }
        if(!esClaveValida()){
            return false;
        }
        return true;
    }
    
    private boolean esNickValido(){
        try{
            if(!daoUsuario.validarNick(nick)){
                Utilitario.enviarMensajeGlobalError("El usuario es invalido");
                return false;
            }
        }catch(Exception e){
            Utilitario.enviarMensajeGlobalError("Error en el sistema");
        }
        return true;
    }
    
    private boolean esClaveValida(){
        try{
            if(!daoUsuario.validarClave(nick, clave)){
                Utilitario.enviarMensajeGlobalError("La clave es invalida");
                return false;
            }
        }catch(Exception e){
            Utilitario.enviarMensajeGlobalError("Error en el sistema");
        }
        return true;
    }
    
    /*GETTER AND SETTER*/
    
    public String getNick() {
        return nick;
    }

    public void setNick(String nick) {
        this.nick = nick;
    }
    
    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }
    
}
